home *** CD-ROM | disk | FTP | other *** search
Visual Basic class definition | 2004-10-13 | 6.0 KB | 177 lines |
- VERSION 1.0 CLASS
- BEGIN
- MultiUse = -1 'True
- Persistable = 0 'NotPersistable
- DataBindingBehavior = 0 'vbNone
- DataSourceBehavior = 0 'vbNone
- MTSTransactionMode = 0 'NotAnMTSObject
- END
- Attribute VB_Name = "cDIBSection"
- Attribute VB_GlobalNameSpace = False
- Attribute VB_Creatable = True
- Attribute VB_PredeclaredId = False
- Attribute VB_Exposed = False
- Option Explicit
- '
- 'This is an example showing how to save a picture into JPEG format
- 'using the INTEL FREE Library.
- 'There is NO SUPPORT on this part of code.
- '
- 'If you don't need to save in JPEG format the capture, you don't need to
- 'include this part of code in your application.
- '
-
- ' ==================================================================================
- ' Requires: mIJLmod.cls
- ' ijl15.dll (Intel)
- ' ==================================================================================
-
- Private Type RGBQUAD
- rgbBlue As Byte
- rgbGreen As Byte
- rgbRed As Byte
- rgbReserved As Byte
- End Type
- Private Type BITMAPINFOHEADER '40 bytes
- biSize As Long
- biWidth As Long
- biHeight As Long
- biPlanes As Integer
- biBitCount As Integer
- biCompression As Long
- biSizeImage As Long
- biXPelsPerMeter As Long
- biYPelsPerMeter As Long
- biClrUsed As Long
- biClrImportant As Long
- End Type
- Private Type BITMAPINFO
- bmiHeader As BITMAPINFOHEADER
- bmiColors As RGBQUAD
- End Type
- Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
- Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
-
- Private Declare Function GetDesktopWindow Lib "user32" () As Long
- Private Declare Function CreateDIBSection Lib "gdi32" (ByVal hDC As Long, pBitmapInfo As BITMAPINFO, ByVal un As _
- Long, lplpVoid As Long, ByVal handle As Long, ByVal dw As Long) As Long
- Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth _
- As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As _
- Long) As Long
- Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
- Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
- Private Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
- Private Const BI_RGB = 0&
- Private Const BI_RLE4 = 2&
- Private Const BI_RLE8 = 1&
- Private Const DIB_RGB_COLORS = 0 ' color table in RGBs
- Private Type BITMAP
- bmType As Long
- bmWidth As Long
- bmHeight As Long
- bmWidthBytes As Long
- bmPlanes As Integer
- bmBitsPixel As Integer
- bmBits As Long
- End Type
- Private Declare Function GetObjectAPI Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, _
- lpObject As Any) As Long
-
- ' Handle to the current DIBSection:
- Private m_hDIb As Long
- ' Handle to the old bitmap in the DC, for clear up:
- Private m_hBmpOld As Long
- ' Handle to the Device context holding the DIBSection:
- Private m_hDC As Long
- ' Address of memory pointing to the DIBSection's bits:
- Private m_lPtr As Long
- ' Type containing the Bitmap information:
- Private m_tBI As BITMAPINFO
-
- Public Property Get BytesPerScanLine() As Long
- ' Scans must align on dword boundaries:
- BytesPerScanLine = (m_tBI.bmiHeader.biWidth * 3 + 3) And &HFFFFFFFC
- End Property
-
- Public Property Get Width() As Long
- Width = m_tBI.bmiHeader.biWidth
- End Property
-
- Public Property Get Height() As Long
- Height = m_tBI.bmiHeader.biHeight
- End Property
-
- Public Sub LoadPictureBlt(ByVal lhDC As Long, Optional ByVal lSrcLeft As Long = 0, Optional ByVal lSrcTop _
- As Long = 0, Optional ByVal lSrcWidth As Long = -1, Optional ByVal lSrcHeight As Long = -1, Optional ByVal _
- eRop As RasterOpConstants = vbSrcCopy)
- If lSrcWidth < 0 Then lSrcWidth = m_tBI.bmiHeader.biWidth
- If lSrcHeight < 0 Then lSrcHeight = m_tBI.bmiHeader.biHeight
- BitBlt m_hDC, 0, 0, lSrcWidth, lSrcHeight, lhDC, lSrcLeft, lSrcTop, eRop
- End Sub
-
- Public Property Get DIBSectionBitsPtr() As Long
- DIBSectionBitsPtr = m_lPtr
- End Property
-
- Public Sub ClearUp()
- If (m_hDC <> 0) Then
- If (m_hDIb <> 0) Then
- SelectObject m_hDC, m_hBmpOld
- DeleteObject m_hDIb
- End If
- DeleteObject m_hDC
- End If
- m_hDC = 0: m_hDIb = 0: m_hBmpOld = 0: m_lPtr = 0
- End Sub
-
- Public Function CreateFromPicture(ByRef picThis As StdPicture)
- Dim lhDC As Long
- Dim lhDCDesktop As Long
- Dim lhBmpOld As Long
- Dim tBMP As BITMAP
-
- GetObjectAPI picThis.handle, Len(tBMP), tBMP
- If (Create(tBMP.bmWidth, tBMP.bmHeight)) Then
- lhDCDesktop = GetDC(GetDesktopWindow())
- If (lhDCDesktop <> 0) Then
- lhDC = CreateCompatibleDC(lhDCDesktop)
- DeleteDC lhDCDesktop
- If (lhDC <> 0) Then
- lhBmpOld = SelectObject(lhDC, picThis.handle)
- LoadPictureBlt lhDC
- SelectObject lhDC, lhBmpOld
- DeleteObject lhDC
- End If
- End If
- End If
- End Function
-
- Public Function CreateDIB(ByVal lhDC As Long, ByVal lWidth As Long, ByVal lHeight As Long, ByRef hDib As Long _
- ) As Boolean
- With m_tBI.bmiHeader
- .biSize = Len(m_tBI.bmiHeader)
- .biWidth = lWidth
- .biHeight = lHeight
- .biPlanes = 1
- .biBitCount = 24
- .biCompression = BI_RGB
- .biSizeImage = BytesPerScanLine * .biHeight
- End With
- hDib = CreateDIBSection(lhDC, m_tBI, DIB_RGB_COLORS, m_lPtr, 0, 0)
- CreateDIB = (hDib <> 0)
- End Function
-
- Public Function Create(ByVal lWidth As Long, ByVal lHeight As Long) As Boolean
- ClearUp
- m_hDC = CreateCompatibleDC(0)
- If (m_hDC <> 0) Then
- If (CreateDIB(m_hDC, lWidth, lHeight, m_hDIb)) Then
- m_hBmpOld = SelectObject(m_hDC, m_hDIb)
- Create = True
- Else
- DeleteObject m_hDC
- m_hDC = 0
- End If
- End If
- End Function
-